package czolgisci;

import java.util.HashMap;
import java.util.Map;

import utils.delegate.BadArgumentsException;

/**
 * Klasa zarządzająca życiami graczy.
 * 
 * @author kasztan
 * @version 1.0
 */
public class Players
{
	private HashMap<String, Integer> players;

	public final int DEFAULT_LIFES_NUM = 3;

	public Players()
	{
		players = new HashMap<String, Integer>();
	}

	/**
	 * Dodaje gracza
	 * 
	 * @param player
	 *            Name imię dodawanego gracza
	 * @param lifes
	 *            początkowa ilość żyć
	 */
	public void add(String playerName, int lifes)
			throws IllegalArgumentException
	{
		// LifeManager.DEFAULT_LIFES_NUM = lifes;
		if (lifes <= 0)
			throw new IllegalArgumentException(
					"too small number of lifes (must be greater than zero)");

		players.put(playerName, lifes);
	}

	public void add(String playerName)
	{
		players.put(playerName, DEFAULT_LIFES_NUM);
	}

	/**
	 * Odbiera jedno życie graczowi
	 * 
	 * @param playerName
	 *            imię gracza, któremu należy odebrać życie
	 * @return aktualna ilość żyć gracza
	 * @throws BadArgumentsException
	 */
	public int removeLife(String playerName) throws IllegalArgumentException
	{
		if (!players.containsKey(playerName))
			throw new IllegalArgumentException("Player does not exists!");

		int lifes = players.get(playerName) - 1;
		players.put(playerName, lifes);
		return lifes;
	}

	/**
	 * @param playerName
	 *            imię gracza, którego chcemy pobrać ilość żyć
	 * @return aktualna ilość żyć gracza
	 * @throws BadArgumentsException
	 */
	public int getLifes(String playerName) throws IllegalArgumentException
	{
		if (!players.containsKey(playerName))
			throw new IllegalArgumentException("Player does not exists!");

		return players.get(playerName);
	}

	/**
	 * @return imie zwyciescy
	 */
	public String getWinnerName()
	{
		int max = 0;
		String winnerName = null;

		for (Map.Entry<String, Integer> player : players.entrySet())
		{
			if (player.getValue() > max) /*
											 * trzeba sie zastanowic co bedzie
											 * jak bedzie wiecej graczy niz
											 * dwoch i beda mieli tyle samo zyc
											 */
			{
				max = player.getValue();
				winnerName = player.getKey();
			}
		}

		return winnerName;
	}

	/**
	 * resetuje obiekt
	 */
	public void reset()
	{
		players.clear();
	}
}
